home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / Peter Lewis (TCPExample) / PNL Libraries / MyMemory.p < prev    next >
Encoding:
Text File  |  1995-11-08  |  4.0 KB  |  187 lines  |  [TEXT/CWIE]

  1. unit MyMemory;
  2.  
  3. interface
  4.  
  5.     uses
  6.         Types;
  7.  
  8.     function MNewPtr (var p: univ ptr; size: longint): OSErr;
  9.     function MNewHandle (var hhhh: univ handle; size: longint): OSErr;
  10.     function MSetPtrSize (var p: univ ptr; size: longint): OSerr;
  11.     function MSetHandleSize (var hhhh: univ handle; size: longint): OSerr;
  12.     procedure MDisposePtr (var p: univ ptr);
  13.     procedure MDisposeHandle (var hhhh: univ handle);
  14.     function MMungerInsert(data: Handle; offset: longint; ptr2: univ Ptr; len2: longint): OSErr;
  15.     procedure MMungerDelete(data: Handle; offset: longint; len1: longint);
  16.     procedure MZero (p: univ ptr; size: longint);
  17.     procedure MFill (p: univ ptr; size: longint; val: integer);
  18.     procedure MFillLong (p: univ ptr; size: longint; val: longint);
  19. { ptr and size must be long alligned }
  20.     procedure LockHigh (hhhh: univ handle);
  21.     procedure HLockState (hhhh: handle; var state: SignedByte);
  22.     procedure HUnlockState (hhhh: handle; var state: SignedByte);
  23.     procedure TrashPtr (data: Ptr);
  24.     procedure TrashHandle (hhhh: handle);
  25.  
  26. implementation
  27.  
  28.     uses
  29.         Memory, TextUtils;
  30.  
  31. {$SETC debug_memory=0 }
  32.  
  33.     const
  34.         fill_byte = $E5; { odd, big, negative, easily recognizable }
  35.  
  36.     function CheckPtr (p: ptr): boolean;
  37.     begin
  38. {$IFC debug_memory }
  39.         if p = nil then begin
  40.             DebugStr('Memory Error!');
  41.         end;
  42. {$ENDC}
  43.         CheckPtr := p <> nil;
  44.     end;
  45.  
  46.     function MNewPtr (var p: univ ptr; size: longint): OSErr;
  47.         var
  48.             err: OSErr;
  49.     begin
  50.         p := NewPtr(size);
  51.         err := MemError;
  52. {$IFC debug_memory }
  53.         if (err = noErr) then begin
  54.             MFill(p, GetPtrSize(p), fill_byte);
  55.         end;
  56. {$ENDC}
  57.         MNewPtr := err;
  58.     end;
  59.  
  60.     function MNewHandle (var hhhh: univ handle; size: longint): OSErr;
  61.         var
  62.             err: OSErr;
  63.     begin
  64.         hhhh := NewHandle(size);
  65.         err := MemError;
  66. {$IFC debug_memory }
  67.         if (err = noErr) then begin
  68.             MFill(hhhh^, GetHandleSize(hhhh), fill_byte);
  69.         end;
  70. {$ENDC}
  71.         MNewHandle := err;
  72.     end;
  73.  
  74.     function MSetPtrSize (var p: univ ptr; size: longint): OSerr;
  75.     begin
  76.         SetPtrSize(p, size);
  77.         MSetPtrSize := MemError;
  78.     end;
  79.  
  80.     function MSetHandleSize (var hhhh: univ handle; size: longint): OSerr;
  81.     begin
  82.         SetHandleSize(hhhh, size);
  83.         MSetHandleSize := MemError;
  84.     end;
  85.  
  86.     procedure MDisposePtr (var p: univ ptr);
  87.     begin
  88.         if p <> nil then begin
  89. {$IFC debug_memory }
  90.             MFill(p, GetPtrSize(p), fill_byte);
  91. {$ENDC}
  92.             DisposePtr(p);
  93.             p := nil;
  94.         end;
  95.     end;
  96.  
  97.     procedure MDisposeHandle (var hhhh: univ handle);
  98.     begin
  99.         if hhhh <> nil then begin
  100. {$IFC debug_memory }
  101.             MFill(hhhh^, GetHandleSize(hhhh), fill_byte);
  102. {$ENDC}
  103.             DisposeHandle(hhhh);
  104.             hhhh := nil;
  105.         end;
  106.     end;
  107.  
  108.     procedure MZero (p: univ ptr; size: longint);
  109.     begin
  110.         MFill(p, size, 0);
  111.     end;
  112.     
  113.     procedure MFill (p: univ ptr; size: longint; val: integer);
  114.         var
  115.             i: longint;
  116.     begin
  117.         if CheckPtr(p) then begin
  118.             for i := longint(p) to longint(p) + size - 1 do begin
  119.                 ptr(i)^ := val;
  120.             end;
  121.         end;
  122.     end;
  123.  
  124.     procedure MFillLong (p: univ ptr; size: longint; val: longint);
  125.         type
  126.             longPtr = ^longint;
  127.         var
  128.             i: longint;
  129.     begin
  130.         if CheckPtr(p) then begin
  131.             i := longint(p);
  132.             while size > 3 do begin
  133.                 longPtr(i)^ := val;
  134.                 i := i + 4;
  135.                 size := size - 4;
  136.             end;
  137.         end;
  138.     end;
  139.  
  140.     procedure LockHigh (hhhh: univ handle);
  141.     begin
  142.         MoveHHi(hhhh);
  143.         HLock(hhhh);
  144.     end;
  145.  
  146.     procedure HLockState (hhhh: handle; var state: SignedByte);
  147.     begin
  148.         state := HGetState(hhhh);
  149.         HLock(hhhh);
  150.     end;
  151.  
  152.     procedure HUnlockState (hhhh: handle; var state: SignedByte);
  153.     begin
  154.         state := HGetState(hhhh);
  155.         HUnlock(hhhh);
  156.     end;
  157.  
  158.     procedure TrashPtr (data: Ptr);
  159.     begin
  160.         if (data <> nil) then begin
  161.             MFill(data, GetPtrSize(data), fill_byte);
  162.         end;
  163.     end;
  164.  
  165.     procedure TrashHandle (hhhh: handle);
  166.     begin
  167.         if (hhhh <> nil) & (hhhh^ <> nil) then begin
  168.             MFill(hhhh^, GetHandleSize(hhhh), fill_byte);
  169.         end;
  170.     end;
  171.  
  172.     function MMungerInsert(data: Handle; offset: longint; ptr2: univ Ptr; len2: longint): OSErr;
  173.         var
  174.             junk_long: longint;
  175.     begin
  176.         junk_long := Munger(data, offset, nil, 0, ptr2, len2);
  177.         MMungerInsert := MemError;
  178.     end;
  179.     
  180.     procedure MMungerDelete(data: Handle; offset: longint; len1: longint);
  181.         var
  182.             junk_long: longint;
  183.     begin
  184.         junk_long := Munger(data, offset, nil, len1, @junk_long, 0);
  185.     end;
  186.     
  187. end.